package com.calvin.study.reflect;

import com.calvin.study.reflect.model.Cat;

//获取Class对象的几种方式
public class GetClass {

	// 获取Class对象的几种方式
	public static void main(String[] args) throws Exception {
		try {
			String classPath = "spring.framework.study.reflect.model.Cat";

			// 1.应用场景：多用于配置文件，读取类全路径，加载类。
			Class cls1 = Class.forName(classPath);
			System.out.println(cls1);

			// 2.类加载阶段，应用场景：多用于参数传递，比如通过反射得到对应构造器对象
			Class cls2 = Cat.class;
			System.out.println(cls2);

			// 3.对象.getClass(),应用场景，有对象实例
			Cat cat = new Cat();
			Class cls3 = cat.getClass();
			System.out.println(cls3);

			// 4.通过类加载器，获取Class对象
			ClassLoader cl = cat.getClass().getClassLoader();
			Class cls4 = cl.loadClass(classPath);
			System.out.println(cls4);

			// 5.基本数据(int,char,boolean,float,double,byte,long,short)
			Class intCls = int.class;
			System.out.println(intCls);

			// 6.基本数据类型对应的包装类，可通过.TYPE得到Class类队形
			Class typeCls = Integer.TYPE;
			System.out.println(typeCls);

			// java底层通过反射，自动完成装箱和拆箱。
			System.out.println(intCls == typeCls);

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

	}
}
